
	参考文献：
		https://blog.csdn.net/m0_74970386/article/details/130723638
	作用域：
		上一讲我们是从变量的作用域角度将变量划分为局部变量和全局变量，这是从空间的角度来分析的。
		我们发现当变量被定义在程序的不同位置时，它的作用范围是不一样的。这个作用范围就是我们所说的作用域。<也可以说是从时间上解释>
	
		任何一种编程中，作用域是程序中定义的变量所存在的区域，超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量：
		1.在函数或块内部的局部变量。
		2.在所有函数外部的全局变量。
		3.在形式参数的函数参数定义中。

	1.代码块作用域（block scope）
		
		（1）含义：
			代码块作用域指的是在程序代码中，由花括号 {} 包围的区域所定义的变量和函数的可见性和生命周期。
			在C语言中，代码块可以是函数体、循环体、条件语句体等。

		（2）特点：
			局部性：变量只在声明它的代码块内有效。
			生命周期：变量在代码块执行开始时创建，在代码块执行完毕后销毁。
			隐藏性：变量不会在代码块外部被访问。

		例子：function myFunction() {
				var localVar = "我是局部变量";
				console.log(localVar); // 输出: 我是局部变量
			}

			console.log(localVar); // 报错: localVar is not defined
		
		在上面的例子中，localVar 是在 myFunction 函数内部定义的局部变量，只能在函数内部访问。
		在函数外部尝试访问 localVar 会导致错误。

		（3）与全局作用域的区别：
			全局作用域：在函数外部定义的变量或函数属于全局作用域，可以在整个程序的任何地方访问。
			函数作用域：在函数内部定义的变量或函数属于函数作用域，只能在函数内部访问。

	2.文件作用域（file scope）
		
		（1）含义：文件作用域指的是在文件（或模块）中定义的变量或函数，可以在整个文件中访问，但在其他文件中不可见。
				  这种作用域通常用于模块化编程，避免全局污染。
				  作用范围是从它们的声明位置开始，到文件的结尾处都是可以访问的。
				  另外，函数名也具有文件作用域，因为函数名本身也是在代码块之外

		（2）特点：变量或函数在文件（或模块）的顶层定义。
				  可以在整个文件中访问，但在其他文件中不可见（除非显式导出）。
				  有助于模块化设计和代码组织

	3.原型作用域（prototype scope）
		
		（1）含义：原型作用域只适用于那些在函数原型中声明的参数名。函数在声明的时候可以不写参数的名字（但参数类型是必须要写上的）.
				  多次尝试可以发现，函数原型的参数名还可以随便写一个名字，不必与形式参数相匹配（当然，这样做毫无意义）。允许你这么做，只是因为原型作用域起了作用。

		（2）特点：
				对象可以通过原型链访问其原型对象上的属性和方法。
				如果对象本身没有某个属性或方法，会沿着原型链向上查找。
		
	4.函数作用域（function scope）
		（1）含义：函数作用域是指在函数内部定义的变量或函数，其可见性和生命周期仅限于该函数内部。
			
		（2）特点：
				 局部变量：在函数内部声明的变量（使用 var、let 或 const）只能在函数内部访问，外部无法访问。
				 生命周期：函数执行完毕后，局部变量会被销毁，释放内存。
				 嵌套函数：在函数内部定义的函数（嵌套函数）可以访问外部函数的变量，但外部函数无法访问嵌套函数的变量。
				 函数作用域确保了变量的封装性，避免了命名冲突，并优化了内存管理

		例子：
				function myFunction() {
					let x = 10; // 局部变量
					console.log(x); // 可以访问
				}
				myFunction();
				console.log(x); // 报错，x 未定义

		
	5.声明和定义：
		定义：
			  当一个变量被定义的时候，编译器为变量申请内存空间并填充一些值。
			 （1）定义是为变量、函数或类型分配内存或提供具体实现。
			 （2）定义是声明的具体化，它会为变量分配存储空间，或者为函数提供实现代码。

		声明：
			当一个变量被声明的时候，编译器就知道该变量被定义在其他地方。
			(1).声明是告诉编译器某个变量、函数或类型的存在，不需要再为此申请内存空间。
			(2).声明通常包括变量名、类型、函数签名等基本信息。
			(3).声明的目的是让编译器知道某个标识符的存在，以便在代码中使用它。


		例子：
		...函数加法

		#include<stdio.h>

		int add(int x,int y);//声明一个add函数，返回值为int。int x,int y为形式参数。

		int add(int x,int y)//定义一个函数原型，
		{
			return x + y;
		}

		int main()
		{
			//定义变量
			int a = 10;
			int b = 10;

			int result = add(a,b);//传参
			printf("a + b = %d",result)//打印结果
		}
		
			
